package tutorial.main.vista;



import java.util.ArrayList;
import tutorial.main.R;
import tutorial.main.control.AppCloseListener;
import tutorial.main.control.AppCloser;
import tutorial.main.control.NetChangeService;
import tutorial.main.control.Preferencias;
import tutorial.main.control.SConfig;
import tutorial.main.control.Utilities;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.text.Layout;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.ToggleButton;
import android.widget.AdapterView.OnItemClickListener;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ListActivity;
import android.app.ProgressDialog;
import tutorial.entidades.Evento;
import tutorial.main.control.Notificable;
import tutorial.main.control.Sync;
import tutorial.main.data.GestorBDLista;
import tutorial.main.data.ProviderRegistro;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.ServiceConnection;
import android.database.sqlite.SQLiteException;
import android.os.IBinder;


public class GrillaDeEstados extends ListActivity  implements Notificable,AppCloseListener {
	
	private NetChangeService ncservice;
	private GrillaAdapter grillaAdapter;
	private Evento eventoSeleccionado;
	private Evento eventoNuevo;
	private Context yo;	
	Button btnAceptarEliminar;
	Button btnCancelarEliminar;
	Layout layoutBotonesEliminar;
	////////////////////////////////
	static final int id_dialogo_salir=0;
	static final int id_dialogo_evento=1;
	static final int id_dialogo_progresoSync=4;
	static final int id_dialogo_sinc_exito=5;
	static final int id_dialogo_sinc_error=6;
	static final int id_dialogo_ayuda=7;
	static final int id_dialogo_error_db=8;
	static final int id_dialogo_error_init_session=9;
	static final int id_dialogo_eliminar_eventos=10;
	static final int id_dialogo_sin_eventos_seleccionados=11;
	static boolean UNDER_DELETING=false;
	private int id_us;
	////////////////////////////////
	static Evento ultimoEvento = null;
	//////////////////////////////
	private ArrayList<Evento> eventosABorrar;
	private ProgressDialog progSyncDialog;
	
	final ServiceConnection mConnection = new ServiceConnection() 
	{
		public void onServiceConnected(ComponentName className, IBinder service) 
		{
			ncservice = ((NetChangeService.LocalBinder) service).getService();
			ncservice.RegisterNotificable(GrillaDeEstados.this);
		}

		public void onServiceDisconnected(ComponentName className) 
		{
			ncservice = null;
		}
	};
	
	@Override
	public void onCreate(Bundle savedInstanceState) 
	{		
		
		Log.v("GrillaDeEstados","onCreate");
		
		super.onCreate(savedInstanceState);
	    setContentView(R.layout.main);	    
	    yo=this;
	    btnAceptarEliminar= (Button)this.findViewById(R.id.BtnEliminarAceptar);
		btnCancelarEliminar=(Button)this.findViewById(R.id.BtnEliminarCancelar);
		btnAceptarEliminar.setVisibility(android.view.View.GONE);
		btnCancelarEliminar.setVisibility(android.view.View.GONE);
		//Id usuario
	    id_us=SConfig.getSingleton().getCi();//TODO: Kill Singleton
	    btnAceptarEliminar.setOnClickListener(new OnClickListener() 
		{			
			public void onClick(View arg0) 
			{				
				eliminarEventosSeleccionados();
			}
		});
		btnCancelarEliminar.setOnClickListener(new OnClickListener() 
		{			
			public void onClick(View arg0) 
			{
				UNDER_DELETING=false;
				btnAceptarEliminar.setVisibility(android.view.View.GONE);
				btnCancelarEliminar.setVisibility(android.view.View.GONE);
				grillaAdapter.notifyDataSetChanged();
			}
		});		
				
		//Formateo de lista
		formatListView();
		
		// Muestro los datos del usuario y veo si ya inicie o lo hize ahora
		if(SConfig.getSingleton().getUsuario().length() > 0)
		{
			this.setTitle(getString(R.string.app_name)+" >> "+SConfig.getSingleton().getUsuario()+"@"+SConfig.getSingleton().getCi());
		}
		else
		{
			this.setTitle(getString(R.string.app_name)+" >> "+getIntent().getExtras().getString("usuario")+"@"+getIntent().getExtras().getString("clave_usuario"));
		}
	    // Lanzo el servicio para detectar cambios en la red
		initService();
		
        // Registro para que pueda cerrarse
        AppCloser.registerApplicationCloseListener(this);
		
		if(this.ultimoEvento!=null)
		{
			Log.v("GrillaDeEstado","CambiarEstadoConexion");
			CambiarEstadoDeConexion(this.ultimoEvento);
		}
		else
		{
			Log.v("GrillaDeEstado","NO CambiarEstadoConexion");
		}
        
	}
	
	////////////////////////////////
	private void cargaBDPrueba()//Metodo de prueba, no se usa.
	{
		try
		{
		int a=(GestorBDLista.ultimoNmro( yo));
		eventoNuevo =new Evento();
			
		eventoNuevo.setId(a);
			eventoNuevo.setCodUsuario(31);
			eventoNuevo.setEstadoConetado(true);
			eventoNuevo.setSincronizado(true);
			eventoNuevo.setMomento(123123123);
			eventoNuevo.setTipoConexion("TipoCon--");
			eventoNuevo.setSubtipoConexion("SubtipoCon");
			eventoNuevo.setReason("razzooon");
		}
		catch (SQLiteException e) 
		{
			showDialog(id_dialogo_error_db);
		}
			
	}
	

	private void formatListView() 
	{
		grillaAdapter = new GrillaAdapter(this);

		try
		{
			Runnable r = new Runnable() 
			{	@Override
				public void run() 
				{	//Carga en la lista de eventos almacenados en otras sesiones
					grillaAdapter.setEventos(GestorBDLista.cargaEventosPrevios(ProviderRegistro.CONTENT_URI, yo, id_us));			
					grillaAdapter.notifyDataSetChanged();			
					getListView().setAdapter(grillaAdapter);
			        // Filtro .....
					grillaAdapter.FiltrarSegunPreferencias();
					grillaAdapter.OrdenarSegunPreferencias();
				}
			};
			runOnUiThread(r); // Para resolver el bug
		}
		catch (SQLiteException e) 
		{
			showDialog(id_dialogo_error_db);
		}
		
		//Seteo de listener
		getListView().setOnItemClickListener(new OnItemClickListener() {
			
			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1,	int position, long arg3) 
			{
					eventoSeleccionado(position);
			;}

		});
		
        // Filtro .....
		FiltrarSegunPreferencias();
		
		grillaAdapter.notifyDataSetChanged();
	}
	
	private void eventoSeleccionado(int position) 
	{
		eventoSeleccionado = grillaAdapter.getEvento(position);
		
		crearDialogoEvento();
	}

	
	private void initService()
	{
		Log.v("Launch","initService");
		startService(new Intent(this, NetChangeService.class));
	}
	
	@Override
	protected void onResume() 
	{

		if(this.ultimoEvento!=null)
		{
			CambiarEstadoDeConexion(this.ultimoEvento);
		}
		
		Log.v("GrillaDeEstados","onResume");
		
		
		bindService(new Intent(GrillaDeEstados.this, NetChangeService.class), mConnection,	0);
		
		// Filtro .....
		grillaAdapter.setEventos(GestorBDLista.cargaEventosPrevios(ProviderRegistro.CONTENT_URI, yo, id_us));			
		grillaAdapter.notifyDataSetChanged();	
		FiltrarSegunPreferencias();
		OrdenarSegunPreferencias();
		grillaAdapter.notifyDataSetChanged();
		
		super.onResume();
		
	}	
	
	private void FiltrarSegunPreferencias()
	{
		Log.v("Filtra en Grilla","Cantidad: "+grillaAdapter.getFullCount());
		if(grillaAdapter.getFullCount()>0)
		{
			grillaAdapter.FiltrarSegunPreferencias();
		}
	}
	
	private void OrdenarSegunPreferencias()
	{
		Log.v("Ordenar en Grilla","Cantidad: "+grillaAdapter.getCount());
		if(grillaAdapter.getCount()>0)
		{
			grillaAdapter.OrdenarSegunPreferencias();
		}
	}	
	
	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		menu.clear();
		MenuInflater inflater = new MenuInflater(this);
		inflater.inflate(R.menu.options_menu, menu);
		return true;
	}
	
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		switch (item.getItemId()) {
	
		case R.id.menu_config:
			mostrarConfiguracion();
			return true;
			
		case R.id.menu_salir:
			showDialog(id_dialogo_salir);
			return true;
			
		case R.id.menu_sync:
			
			// Muestro el dialogo y corro el hilo
			progSyncDialog = new ProgressDialog(this);
			progSyncDialog.setTitle("");
			progSyncDialog.setMessage(getString(R.string.msje_progresoSync));
			progSyncDialog.setCancelable(false);
			progSyncDialog.setIndeterminate(true);
			progSyncDialog.show();
			
			Handler mHandler = new Handler(Looper.getMainLooper());
			mHandler.post(	new Runnable()
					{
						public void run()
						{
							//sync();
							Sync syn = new Sync();
							syn.syncEventos(id_us, (GrillaDeEstados) yo);
						}
					}	);
			/*
			runOnUiThread
			(
					new Runnable()
					{
						public void run()
						{
							//sync();
							Sync syn = new Sync();
							syn.syncEventos(id_us, (GrillaDeEstados) yo);
						}
					}
			);
			*/
			return true;
			
		case R.id.menu_ayuda:
			mostrarAyuda();
			return true;
			
		case R.id.menu_llamadas:
			mostrarListaDeLlamadas();
			return true;
			
		case R.id.menu_map:
			mostrarMapa();
			return true;
			
		case R.id.menu_eliminar:
			opcionEliminar();
			return true;
			
		}
		return false;
	}

	/**
	 * Llama para que se muestre el Call Log
	 */
	private void mostrarListaDeLlamadas() 
	{
		 Intent i = new Intent();
	     i.setAction(Intent.ACTION_VIEW);
	     i.setData(android.provider.Contacts.People.CONTENT_URI);
	     i.setType("vnd.android.cursor.dir/calls");
	     startActivity(i); 	
	}

	/**
	 * Muestra el mapa con las conexiones
	 */
	private void mostrarMapa() 
	{
		Intent intent = new Intent(this,MapsActivity.class);
		intent.putExtra("id_usuario",id_us);
	    startActivity(intent);	
	}

	private void UnderConstruction()
	{
		Intent intent = new Intent(this,UnderConst.class);
	    startActivity(intent);		
	}
	
	private void mostrarAyuda()
	{
		Intent intent = new Intent(this,Ayuda.class);
	    startActivity(intent);		
	}
	
	private void mostrarConfiguracion()
	{
		Intent intent = new Intent(this,Preferencias.class);
	    startActivity(intent);
	}
	
	private void sync()
	{
		// showDialog(id_dialogo_progresoSync);
		progSyncDialog = new ProgressDialog(this);
		progSyncDialog.setTitle("");
		progSyncDialog.setMessage(getString(R.string.msje_progresoSync));
		progSyncDialog.setCancelable(false);
		progSyncDialog.setIndeterminate(true);
		progSyncDialog.show();
		
		Sync syn = new Sync();
		syn.syncEventos(this.id_us, this);

	}
	private void opcionEliminar()
	{
		UNDER_DELETING=true;
		btnAceptarEliminar.setVisibility(android.view.View.VISIBLE);
		btnCancelarEliminar.setVisibility(android.view.View.VISIBLE);
		grillaAdapter.notifyDataSetChanged();
	}

	public boolean notificar(Evento evento) 
	{
		eventoNuevo=evento;
		runOnUiThread
		(
				new Runnable()
				{
					public void run()
					{
						ActualizarEstado();
					}
				}
		);	

		try
		{
			Runnable r= new Runnable() 
				{	@Override
					public void run() 
					{ //Carga en la lista de eventos almacenados en otras sesiones
					GestorBDLista.insertEvento(eventoNuevo, yo);				
					}
				};
				new Thread(r).start();
			                           
		}
		catch (SQLiteException e) 
		{
			showDialog(id_dialogo_error_db);
		}
		return false;
	}
	
	public void ActualizarEstado()
	{
		// - HOLA FLACO, PASO ALGO, YO SOLO TE AVISO
		// - A mi? ehh bueno, y yo que hago con esto
		// - Y, nose usa los datos talvez?
		// - Mmmmm bueno, ya veo que hago =)
		
		// Ah, mira vos, me llego un dato de un cambio de conexion
		// Epa, yo soy el que tengo que mostrarlo
		// Ya me pongo a eso ...
		// jajaja y como hago eso?
		// Bueno, le aviso a GrillaAdapter

		// Mmmm bueno si cambio mi conexion, porlasdudas aviso a don usuario.
		CambiarEstadoDeConexion(eventoNuevo);
		// EY EY, aun no termino
		GrillaAdapter adp = (GrillaAdapter)getListView().getAdapter();		
		adp.AgregarConexion(eventoNuevo);
		
		// Tambien tengo que filtrar si agrego un nuevo Evento 
		FiltrarSegunPreferencias();
		OrdenarSegunPreferencias();		
		
		adp.notifyDataSetChanged();		
	}
	
	public void CambiarEstadoDeConexion(Evento e) 
	{
		// Guardo para el onResume
		this.ultimoEvento = e;
		
		ImageView icono = (ImageView)this.findViewById(R.id.IconoEstadoActual);
		TextView titulo = (TextView)this.findViewById(R.id.TextoEstadoActual);
		TextView mensaje = (TextView)this.findViewById(R.id.MensajeEstadoActual);
		if(e.getEstadoConetado()==true)
		{
			// ESTOY CONECTADO ... AVISO
			icono.setImageResource(R.drawable.net_on);
    		titulo.setText(R.string.i_conectado);
    		mensaje.setText(e.getTipoConexion()+" - "+e.getSubtipoConexion());
   		
		}
		else
		{
			// NO ESTOY CONECTADO ... AVISO 			
    		icono.setImageResource(R.drawable.net_off);
    		titulo.setText(R.string.i_desconectado);
    		mensaje.setText(R.string.i_mensaje_desconectado);
		}
	}

	public NetChangeService getNetChangeService()
	{
		return ncservice;
	}
	
	
	private void exitApplication() {

		Intent intent = new Intent(this,NetChangeService.class);
	    stopService(intent);
	    unbindService(mConnection);
		setResult(Utilities.CLOSE_APLICATION);
		AppCloser.ExitApp(null);
	}
	
	//Creacion de dialogos segun su tipo
	@Override
    protected Dialog onCreateDialog(int id)
    {
    	Dialog dialogo= null;
    	switch(id) {
        case id_dialogo_salir:
            dialogo=crearDialogoSalir();
            break;       
        case id_dialogo_progresoSync:
        	dialogo=crearDialogoProgresoSync(id_dialogo_progresoSync);
            break;
        case id_dialogo_sinc_exito:
        	dialogo=crearDialogoSincExito();
            break;
        case id_dialogo_sinc_error:
        	dialogo=crearDialogoSincError();
            break;
        case id_dialogo_ayuda:
        	//dialogo=crearDialogoAyuda(); TODO:
            break;
        case id_dialogo_error_init_session:
            dialogo=crearDialogoErrorIniciarSesion();
        	break;         
        case id_dialogo_eliminar_eventos:
            dialogo=crearDialogoEliminarEventos();
        	break;
        case id_dialogo_sin_eventos_seleccionados:
        	dialogo=crearDialogoSinEventosSeleccionados();
        	break;
        default:
            dialogo = null;
        }

    	return dialogo;
    }
    
	public void showDialogErrorAlIniciarSesion()
	{
		showDialog(id_dialogo_error_init_session);
		
		if(progSyncDialog!=null)
		{
			progSyncDialog.dismiss();
		}		
	}	
	
	public void showDialogErrorSync()
	{
		showDialog(id_dialogo_sinc_error);
		
		if(progSyncDialog!=null)
		{
			progSyncDialog.dismiss();
		}		
		
	}		
	
	public void showDialogExitoSync()
	{
		showDialog(id_dialogo_sinc_exito);
		
		if(progSyncDialog!=null)
		{
			progSyncDialog.dismiss();
		}
		
		formatListView();
	}		
		
	
	//Creacion de dialogo para confirmar cierre de la aplicacion
    private Dialog crearDialogoSalir()
    {
    	AlertDialog.Builder builder = new AlertDialog.Builder(this);
    	builder.setMessage(getString(R.string.msje_confirmarSalir));
    	builder.setPositiveButton(R.string.si, new DialogInterface.OnClickListener() {
    	           public void onClick(DialogInterface dialog, int id) {
    	        	   exitApplication();
    	        	       }
    	       });
    	builder.setNegativeButton(R.string.no, null);
    	AlertDialog dialogoSalir = builder.create();
    	dialogoSalir.setTitle(getString(R.string.salir));
    	return dialogoSalir;
    }
    
    /**
    * Dialogo que crea y retorna el dialogo de Error en el inicio de sesion
    */
        
    public Dialog crearDialogoErrorIniciarSesion()
    {
    	AlertDialog.Builder builder = new AlertDialog.Builder(this);
    	builder.setMessage(getString(R.string.msje_errorInicioSesion));
    	builder.setNeutralButton(getString(R.string.aceptar), null);            
    	AlertDialog dialogo = builder.create();
    	return dialogo;
    }    
    
  //Creacion de dialogo cuando se selecciona un elemento de la lista
    private void crearDialogoEvento()
    {

    	long f = eventoSeleccionado.getMomento();
		CharSequence fc = getString(R.string.ev_momento)+DateFormat.format("dd/M/yyyy kk:mm:ss", f);
		String syn;
		if(eventoSeleccionado.getSincronizado()==true)
    	{syn=(getString(R.string.ev_sync));}
    	else
    	{syn=(getString(R.string.ev_no_sync));}

    	String estado;
		if(eventoSeleccionado.getEstadoConetado()==true)
    	{
    		estado = getString(R.string.ev_conexion);
    	}
    	else
    	{
    		estado = getString(R.string.ev_desconexion);
    	}
		String tipo = getString(R.string.ev_tipoC)+eventoSeleccionado.getTipoConexion();
		String subTipo = getString(R.string.ev_suptipoC)+eventoSeleccionado.getSubtipoConexion();
		String reason = getString(R.string.ev_reason)+eventoSeleccionado.getRaeson();
		
		
		Intent intent = new Intent(this,DetalleEvento.class);
			intent.putExtra("evento_id",eventoSeleccionado.getId());
			intent.putExtra("evento_fecha",fc);
			intent.putExtra("evento_sync",syn);
			intent.putExtra("evento_estado",estado);
			intent.putExtra("evento_tipo",tipo);
			intent.putExtra("evento_subtipo",subTipo);
			intent.putExtra("evento_reason",reason);
	    startActivity(intent);
    	
    }
    
    //Dialogo que informa el exito del envio de datos al servidor
    public Dialog crearDialogoSincExito()
    {
    	AlertDialog.Builder builder = new AlertDialog.Builder(this);
    	builder.setMessage(getString(R.string.msje_exitoSync));
    	builder.setNeutralButton(getString(R.string.aceptar), null);    	
    	AlertDialog dialogo = builder.create();
    	return dialogo;
    }
    
  //Dialogo que informa que no hay elementos seleccionados
    public Dialog crearDialogoSinEventosSeleccionados()
    {
    	AlertDialog.Builder builder = new AlertDialog.Builder(this);
    	builder.setMessage(getString(R.string.msje_sinElementosSeleccionados));
    	builder.setNeutralButton(getString(R.string.aceptar), null);    	
    	AlertDialog dialogo = builder.create();
    	return dialogo;
    }
    
  //Dialogo que informa ujn error en el envio de datos al servidor
    public Dialog crearDialogoSincError()
    {
    	AlertDialog.Builder builder = new AlertDialog.Builder(this);
    	///////////TODO: AMPLIAR SEGUN EL TIPO DE ERROR
    	////switch(tipoError)
    	//case(1):
    	builder.setMessage(getString(R.string.msje_errorSync1));
    	builder.setNeutralButton(getString(R.string.aceptar), null);    	
    	AlertDialog dialogo = builder.create();
    	return dialogo;
    }
    
    //Creacion confirmacion de eliminacion de eventos
    private Dialog crearDialogoEliminarEventos()
    {
    	AlertDialog.Builder builder = new AlertDialog.Builder(yo);
    	builder.setMessage(getString(R.string.msje_confirmarEliminarEventos));
    	builder.setPositiveButton(R.string.si, new DialogInterface.OnClickListener() {
    	           public void onClick(DialogInterface dialog, int id) 
    	           {
    	        	   try
    	        	   {
    	        		   runOnUiThread
    	       			(
    	       					new Runnable()
    	       					{
    	       						public void run()
    	       						{
    	       							for (int i = 0; i < eventosABorrar.size(); i++) 
    	       							{
    	       								GestorBDLista.deleteEvento(yo,eventosABorrar.get(i).getId());
    	       							}
    	       							GrillaDeEstados.UNDER_DELETING=false;
    	       							btnAceptarEliminar.setVisibility(android.view.View.GONE);
    	       							btnCancelarEliminar.setVisibility(android.view.View.GONE);
    	       							formatListView() ;
    	       							//grillaAdapter.notifyDataSetChanged();
    	       						}
    	       					}
    	       			);
    	        		   //new Thread((new Eliminador(yo, eventosABorrar))).start();
    	        	   }
    	   		catch (SQLiteException e) 
    	   		{
    	   			showDialog(id_dialogo_error_db);
    	   		}
    	           }
    	       });
    	builder.setNegativeButton(R.string.no, null);
    	AlertDialog dialogoEliminarEventos = builder.create();
    	dialogoEliminarEventos .setTitle(getString(R.string.f_menu_eliminar));
    	return dialogoEliminarEventos;
    }
    
    
    
  //Creacion de dialogos de tipo ProgressDialog
    private Dialog crearDialogoProgresoSync(int dialogo)
    {
    	ProgressDialog pDialog;
		pDialog = new ProgressDialog(this);
		pDialog.setTitle("");
		if(dialogo==id_dialogo_progresoSync)
		{ pDialog.setMessage(getString(R.string.msje_progresoSync)); }
			
	
		pDialog.setCancelable(false);
		pDialog.setIndeterminate(true);
		//pDialog.setCanceledOnTouchOutside(true); HAY Q BORRAR ESTO DSPS 
    	return pDialog;
    }
    
    private void eliminarEventosSeleccionados()
    {
    	eventosABorrar=new ArrayList<Evento>();
    	//Obtengo la lista de items del adapter
    	ListView lista = getListView();
		
		for (int i = 0; i < lista.getChildCount(); i++) 
		{
			//Obtengo cada item de la listay luego su correspondiente GrillaHolder			
			View item;
			item=(View)lista.getChildAt(i);
			GrillaHolder holder = (GrillaHolder) item.getTag();
			//REviso si el boton esta seleccionado
			ToggleButton tglBtnSelected;
			tglBtnSelected=holder.btnTilde;
			
			//Coloco los eventos a borrar en una lista
			if (tglBtnSelected.isChecked()) 
			{
				Log.v("Borrado","A borrar:"+i);
				eventosABorrar.add((Evento) grillaAdapter.getItem(i));
			}
		}
		
		if (eventosABorrar.isEmpty()) 
		{
			showDialog(id_dialogo_sin_eventos_seleccionados);
		}
		else
		{showDialog(id_dialogo_eliminar_eventos);}
		
		
    }
    
    
    // capturo la tecla back y pregunto si quiere salir ...
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) 
	{
		Log.v("GrillaEstados","onKeyDown");
		boolean ret = true;
		if (keyCode == KeyEvent.KEYCODE_BACK) 
		{
			Log.v("GrillaEstados","crearDialogoSalir");
			showDialog(id_dialogo_salir);
		} 
		else 
		{
			ret = super.onKeyDown(keyCode, event);
		}
		return ret;
	}

	@Override
	public void onAppCloseRequest(Bundle data) 
	{
		runOnUiThread
		(
				new Runnable()
				{
					public void run()
					{
						if (ncservice != null) 
						{
							ncservice.UnregisterNotificable(GrillaDeEstados.this);
						}
						SConfig.getSingleton().setUsuario(null);
						SConfig.getSingleton().setCi(0);
						//unbindService(mConnection);
						GrillaDeEstados.this.finish();
					}
				}
		);	
		
	}

	
	    
}
